<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
 <meta http-equiv="content-style-type" content="text/css" />
 <meta name="author" content="Arlsair" />
 <meta name="date" content="2003-07-09" />
 <title>ConditionalFilter AviSynth Filter</title>
 <link rel="stylesheet" type="text/css" href="../../style.css" />
 <style type="text/css">td {vertical-align:top;}</style>
</head><body>
<h3><a name="ConditionalFilter"></a>ConditionalFilter</h3>

<tt>ConditionalFilter</tt>(<i>clip &quot;testclip&quot;, clip &quot;source1&quot;, clip &quot;source2&quot;, string &quot;filter&quot;, string &quot;operator&quot;, string &quot;value&quot;, bool &quot;show&quot;</i>)<br />
<br />
<tt>ConditionalFilter</tt> gibt <i>source1</i> zur&uuml;ck, wenn die Bedingung, die durch <i>filter+operator+value</i> angegeben ist, zutrifft. Andernfalls wird <i>source2</i> zur&uuml;ckgegeben. Wenn <i>filter</i> nicht ausdr&uuml;cklich auf einen Clip angewendet wird, so wird der auf den <i>testclip</i> angewendet. Der Ton wird <i>source1</i> entnommen. Am Beispiel:<br />
<br />
<table border="1">
 <tr>
  <td>
   <tt>
    Es werden Frames von &quot;vid_blur&quot; genommen, wenn der durchschnittliche Helligkeitswert eines Frames unter 20 ist. Ansonsten wird der Original-Frame &quot;vid&quot; genommen. Wenn man am Ende &quot;true&quot; hinzuf&uuml;gt, wird der aktuelle Wert angezeigt:<br />
    <br />
    vid = AviSource(&quot;Dateiname.avi&quot;)<br />
    vid_blur = vid.Blur(1.5)<br />
    ConditionalFilter(vid, vid_blur, vid, &quot;AverageLuma()&quot;, &quot;lessthan&quot;, &quot;20&quot;)
   </tt>
  </td>
 </tr>
</table>
<br />    
<i>filter</i> kann jeder interner Filter sein, aber auch einige vordefinierte Funktionen (siehe unten).<br />
F&uuml;r <i>operator</i> kann man "equals", "morethan" oder "lessthan" w&auml;hlen. Oder nat&uuml;rlich stellvertretend &quot;=&quot;, &quot;&gt;&quot; oder &quot;&lt;&quot;.<br />
<br />
Die internen Funktionen sind (bis jetzt):<br />
<tt>AverageLuma</tt>(<i>clip</i>)<br />
<tt>AverageChromaU</tt>(<i>clip</i>)<br />
<tt>AverageChromaV</tt>(<i>clip</i>)<br />
Dies gibt den durchschnittlichen Wert des Pixels einer Ebene (Kanal) zur&uuml;ck. (Erfordert YV12 und ISSE).<br />
<br />
<tt>RGBDifference</tt>(<i>clip1, clip2</i>)<br />
<tt>LumaDifference</tt>(<i>clip1, clip2</i>)<br />
<tt>ChromaUDifference</tt>(<i>clip1, clip2</i>)<br />
<tt>ChromaUDifference</tt>(<i>clip1, clip2</i>)<br />
Diese Funktionen geben als Dezimalzahl zwischen 0 und 255 die absolute Differenz zweier Ebenen (Kan&auml;le) zur&uuml;ck. (Erfordert YV12, ISSE)<br />
<br />
Diese Funktionen beziehen sich immer auf &quot;last&quot;. Da man diesen Parameter nicht spezifizieren braucht, wurde er durch den Testclip ersetzt.<br />
<br />
Andere interne Funktionen sind:<br />
<tt>RGBDifferenceFromPrevious</tt>(<i>clip</i>)<br />
<tt>YDifferenceFromPrevious</tt>(<i>clip</i>)<br />
<tt>UDifferenceFromPrevious</tt>(<i>clip</i>)<br />
<tt>VDifferenceFromPrevious</tt>(<i>clip</i>)<br />
<tt>RGBDifferenceToNext</tt>(<i>clip</i>)<br />
<tt>YDifferenceToNext</tt>(<i>clip</i>)<br />
<tt>UDifferenceToNext</tt>(<i>clip</i>)<br />
<tt>VDifferenceToNext</tt>(<i>clip</i>)<br />
<br />
Diese Funktionen sollte recht nett sein, wenn man Szenenwechsel erkennen will:<br />
<br />
<table border="1">
 <tr>
  <td>Beispiel:<br />
  <br />      
  Es wird der letzte Frame vor einem Szenenwechsel durch den ersten Frame nach dem Szenenwechsel ersetzt:<br />
  <tt>ConditionalFilter(last, last, last.trim(1,0), &quot;YDifferenceToNext()&quot;, &quot;>&quot;, &quot;10&quot;, true)</tt>
  </td>
 </tr>
</table>
<br />
Weitere interne Funktionen:<br />
<tt>YPlaneMax</tt>(<i>clip, float threshold</i>)<br />
<tt>UPlaneMax</tt>(<i>clip, float threshold</i>)<br />
<tt>VPlaneMax</tt>(<i>clip, float threshold</i>)<br />
<tt>YPlaneMin</tt>(<i>clip, float threshold</i>)<br />
<tt>UPlaneMin</tt>(<i>clip, float threshold</i>)<br />
<tt>VPlaneMin</tt>(<i>clip, float threshold</i>)<br />
<tt>YPlaneMedian</tt>(<i>clip</i>)<br />
<tt>UPlaneMedian</tt>(<i>clip</i>)<br />
<tt>VPlaneMedian</tt>(<i>clip</i>)<br />
<tt>YPlaneMinMaxDifference</tt>(<i>clip, float threshold</i>)<br />
<tt>UPlaneMinMaxDifference</tt>(<i>clip, float threshold</i>)<br />
<tt>VPlaneMinMaxDifference</tt>(<i>clip, float threshold</i>)<br />
<br />
<i>Threshold</i> ist das Verh&auml;ltnis, wieviel Prozent an Pixeln &uuml;ber oder unter dem Minimum erlaubt sind. Der Schwellenwert ist optional und standardm&auml;&szlig;ig 0.<br />
<br />
<hr />
<br />
<h3><a name="ScriptClip"></a>ScriptClip</h3>
<br />
<tt>ScriptClip</tt>(<i>clip &quot;clip&quot;, string &quot;function&quot;, bool &quot;show&quot;</i>)<br />
<br />
<tt>ScriptClip</tt> gibt den Clip zur&uuml;ck, der von der Funktion f&uuml;r jeden Frame ausgew&auml;hlt wurde.<br />
<br />
<table border="1">
 <tr>
  <td>
   <tt>
    Beispiele:<br />
    <br />
    Dies zeigt den Unterschied gegen&uuml;ber dem vorherigen Frame im aktuellen Frame an:<br />
    clip = AviSource(&quot;C:\Dateiname.avi&quot;)<br />
    ScriptClip(clip, &quot;Subtitle(String(YDifferenceFromPrevious))&quot;)<br />
    <br />    
    Hier wird <a href="blur.htm">Blur</a> auf jeden Frame angewendet entsprechend dem Unterschied zum vorherigen Frame.<br />
    Au&szlig;erdem zeigt es, wie Fehler angezeigt werden bei manchen Frames :)<br />
    clip = AviSource(&quot;C:\Dateiname.avi&quot;)<br />
    ScriptClip(clip, &quot;Blur(YDifferenceFromPrevious/20.0)&quot;)<br />
    <br />
    Dies wendet <a href="soften.htm">TemporalSoften</a> in sehr ruhigen Szenen und Blur mit variablen Parametern in bewegten Szenen an. Wir weisen auch eine Variable zu, weshalb es einen Zeilensprung gibt:<br />
    function fmin(float &quot;f1&quot;, float &quot;f2&quot;) {<br />
    &nbsp; return (f1&lt;f2) ? f1 : f2<br />
    }<br />
    clip = AviSource(&quot;C:\Dateiname.avi&quot;)<br />
    ScriptClip(clip, &quot;diff = YDifferenceToNext()&quot;+chr(13)+&quot;diff > 2.5 ? Blur(fmin(diff/20,1.5)) : TemporalSoften(2,7,7,3,2)&quot;)
   </tt>
  </td>
 </tr>
</table>
<br />
Beschr&auml;nkungen: Das Ergebnis des Skriptes MUSS exakt die gleichen Eigenschaften (Farbraum, Breite und H&ouml;he) haben wie der Clip, den <tt>ScriptClip</tt> bekommen hat. Das Ergebnis kann eine andere L&auml;nge haben, aber mindestens die des Quellclips. Der Ton eines Clips wird unver&auml;ndert durchgeschleift.
 Bei zwei unterschiedlichen Quellen (z.B. Mpeg2Dec3 und <a href="avisource.htm">AviSource</a>) kann es zu Problemen mit dem Farbr&auml;umen kommen - ein beliebter Fehler.<br />
<br />
<hr />
<br />
<h3><a name="FrameEvaluate"></a>FrameEvaluate</h3>
<br />
<tt>FrameEvaluate</tt>(<i>clip clip, script function, bool &quot;after_frame&quot;</i>)<br />
<br />
&Auml;hnlich wie <tt>ScriptClip</tt>, au&szlig;er dass das Ergebnis des Filters ignoriert wird. Kann dazu genutzt werden, um Variablen usw. zuzuweisen. Die Frames werden direkt durchgeschleift.<br />
Mit <i>after_frame=true/false</i> bestimmt man, ob das Skriptpt bevor (Standard) oder nachdem der Frame vom Filter davor geholt wurde ausgewertet werden soll.<br />
<br />
<form action=""><input type="button" value="Zur&uuml;ck" onclick="history.go(-1)" /></form>
</body>
</html>
